今天繼續接著Day25.的內容來說說經過優化後的新流程。
自從最近當上了Python自耕農以後,對了程式運作又多了一些想法,而這些想法又可以運用在機器人調教上,所以索性要來改了下流程。
或許有人會問:有改和沒改的差異到底有多少呢?
我只能說”相當大啊!"
沒改的時候,做一個主機的紀錄圖檔搬移大概就需要30行的流程了,雖然規模不大,但10台主機也要做10個且每個都有30行的子流程了……
假設機器人執行一個子流程要10秒,10個子流程也要100秒了。
這樣量化之後是不是很有感?
那經過改過之後呢?
就剩下一個28行的子流程,和另外兩個不到20行用來對應特殊檔名處理的子流程了!
一樣先假設機器人執行一個子流程要10秒,再經過修改過之後,執行一次總共就只需要花費30秒而已了,瞬間只需要原本的1/3的耗時,這樣很有感了吧!?(我自己是很有感……)
以上都是些廢話………
下面就讓我們進入流程製作說明的階段吧!
首先老熟人Getdatetostr肯定跑不掉,但這次的老熟人和之前的天數中出現的任何一位都長得有點不太一樣,這難道是傳說中那位”最熟悉的陌生人嗎?
(但是和Day.25中提到的是一樣,沒變)
接著就是加入“動作” :
”取得資料夾中的子資料夾”,將用來存放截圖的的資料夾中所有子資料夾列出來。(2行)
接著就是把我的截圖的”檔名”的”開頭”設定成一個”變數”中”串列”(好Python喔…)(3行)
做法是在變數的值中以”百分比符號%”包住”方括號 []”,方括號內的”文字”則需使用”單引號 ’ ”前後包住,然後兩個文字中間用”逗號,”分隔。
範例:%[‘A’,’B’,’C’]%
這麼做的原因主要是在變數中建立”索引值”,讓執行迴圈時,讓機器人可以自動抓出我想要的值。
(也就是所謂”正確的值”;但機器人只要程式能過,能執行,不出Error,那它才不管你抓出來的到底是不是你想要的”正確值”)
※索引值從0開始,最後一個索引值則是”字串總數”-1!!
因為對於電腦而言,第一個值是0,而不是人腦所認知中的1。
再來就來做迴圈了:
迴圈的設定就是從0開始,到Folder的最後一筆紀錄的編號(Folder.Count)為止!
※Folder的紀錄編號也是從0開始的喔!
※※那…至於為什麼最後一筆紀錄是Folder.Count -1呢?(可以看下上面索引值的說明)
接著我設定兩個變數,把Folder(LoopIndex)的值和Sertit(LoopIndex)的值分別給到NewVar和NewVar3。
然後用”取得資料夾中的檔案”動作,把NewVar中的檔案全都列出來,並存到變數Files中。
※Folder(LoopIndex)的值和Sertit(LoopIndex)的值:
也就是當迴圈跑到幾次時,就讓機器人自動帶出這兩個中第幾號的值
假設:迴圈執行第2次時,LoopIndex的值就是1(從0開始)
然後就讓機器人帶出Folder(1) 和Sertit(1)的值給到NewVar和NewVar3。
接著就是用”For each”迴圈的部分,這邊我是將”Currentltem”變數值先給到”NewVar2”。
※”Currentltem”變數的值:
迴圈每執行一次時,機器人就會從”Files”變數中取出一列的值出來,並將該值作為”Currentltem”的值。
如:Files的值是A、B、C。
第一次執行”For each”迴圈時,Currentltem的值就是A;第二次執行時,Currentltem的值就是B;第三次時就是C…以此類推。
然後再用IF/Else判斷式確認”NewVar2.Name”(NewVar2變數中的"名稱”項目)是否存在和我設定的檔名一致的存在,如果有的話就搬移檔案,沒有的話就不做任何事!
另外,搬移檔案的目的地是以當月名稱命名的資料夾(如:202309);所以在搬移檔案之前還要做一個IF/Else判斷式,去確認目的地資料夾是否存在(不然檔案可是沒地方能搬移的喔!)
※題外話:
雖然不用”For each”迴圈,直接用IF好像也是可行的……
但不保證一定不會出錯喔!
流程如下: